package com.br.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import com.br.model.Jogador;
import com.br.model.Sala;

public class SalasDao {

	private static Map<String, Sala> salas = new HashMap<String, Sala>();
	
	static{
		
		Jogador j1 = new Jogador();
		j1.setNome("Jogador 1");
		j1.setEmail("jogador1@gmail.com");
		
		Jogador j2 = new Jogador();
		j2.setNome("Jogador 2");
		j2.setEmail("jogador2@gmail.com");
		
		Jogador j3 = new Jogador();
		j3.setNome("Jogador 3");
		j3.setEmail("jogador3@gmail.com");
		
		Jogador j4 = new Jogador();
		j4.setNome("Jogador 4");
		j4.setEmail("jogador4@gmail.com");
		
		Jogador j5 = new Jogador();
		j5.setNome("Jogador 5");
		j5.setEmail("jogador5@gmail.com");
		
		JogadorDao dao = new JogadorDao();
		dao.add(j1);
		dao.add(j2);
		dao.add(j3);
		dao.add(j4);
		dao.add(j5);
		
		Sala s1 = new Sala();
		s1.setDono(j1);
		s1.getJogadores().add(j1);
		s1.getJogadores().add(j2);
		s1.setNome("Wes Fodaum");
		s1.setQntVagas(6);
		s1.setRodadas(12);
		s1.getTemas().add("Nome");
		s1.getTemas().add("CEP");
		s1.getTemas().add("Carro");
		s1.getTemas().add("Fruto Verdura Legume");
		s1.getTemas().add("Parte do Corpo");
		s1.getTemas().add("Objeto");
		new SalasDao().add(s1);
		
		Sala s2 = new Sala();
		s2.setDono(j3);
		s2.getJogadores().add(j3);
		s2.getJogadores().add(j4);
		s2.getJogadores().add(j5);
		s2.setNome("Fudidinha com vc");
		s2.setQntVagas(12);
		s2.setRodadas(8);
		s2.getTemas().add("Nome");
		s2.getTemas().add("CEP");
		s2.getTemas().add("Carro");
		s2.getTemas().add("Fruto Verdura Legume");
		s2.getTemas().add("Parte do Corpo");
		s2.getTemas().add("Objeto");
		new SalasDao().add(s2);
		
	}

	public void add(final Sala s) {
		synchronized (salas) {
			s.setUid(UUID.randomUUID().toString());
			salas.put(s.getUid(), s);
		}
	}
	
	public void update(final Sala s) {
		synchronized (salas) {
			salas.remove(s.getUid());
			salas.put(s.getUid(), s);
		}
	}

	public final List<Sala> list() {
		synchronized (salas) {
			List<Sala> retorno = new ArrayList<Sala>();
			retorno.addAll(salas.values());
			return retorno;
		}
	}
	
	public final Sala get(final String uid) {
		synchronized (salas) {
			return salas.get(uid);
		}
	}

	public final Sala remove(final String uid) {
		synchronized (salas) {
			return salas.remove(uid);
		}
	}

}
